home *** CD-ROM | disk | FTP | other *** search
- /* --------------------------------------------------------------------------
- * Copyright 1992 by Forschungszentrum Informatik (FZI)
- *
- * You can use and distribute this software under the terms of the licence
- * you should have received along with this program.
- * If not or if you want additional information, write to
- * Forschungszentrum Informatik, "STONE", Haid-und-Neu-Strasse 10-14,
- * D-7500 Karlsruhe 1, Germany.
- * --------------------------------------------------------------------------
- */
- #include <sys/file.h> // avoid warning for flock
- #include <libc.h>
- #include <stdio.h>
-
- #include "sys.h"
- #include "smg.h"
- #include "sos.h"
-
- #include "gsh_err.h"
- #include "mta_use.h"
- #include "dir_use.h"
- #include "cci_use.h"
-
- #define XTFUNCPROTO
-
- #include <X11/IntrinsicP.h>
- #include <X11/Shell.h>
- extern "C" {
- #include <X11/Xaw/List.h>
- #include <X11/Xaw/Form.h>
- #include <X11/Xaw/Command.h>
- #include <X11/Xaw/Label.h>
- #include <X11/Xaw/Text.h>
- #define ASCII_STRING
- #include <X11/Xaw/AsciiText.h>
- #include <X11/Xaw/Viewport.h>
- }
- #include <X11/StringDefs.h>
- #include <X11/cursorfont.h>
-
- #undef TRUE
- #undef FALSE
-
- // ************************ Types and Objects *************************
-
- const int default_distance = 4;
- Pixel red_pxl, green_pxl, blue_pxl;
-
- struct what_to_show
- { sos_Bool cmp, met;
- int operator== (what_to_show &s) {return cmp==s.cmp AND met == s.met;}
- int operator!= (what_to_show &s) {return cmp!=s.cmp OR met != s.met;}
- };
- static what_to_show current_show = {TRUE, FALSE};
-
- static cmd_count = 0;
- const cmd_string_length = 128;
- const cmd_value_length = 10;
-
- struct cmd_menu
- { sos_Object o;
- sos_Method m;
- Widget main;
- int nr_pars;
- Widget *par_wdgts;
- char **par_txts;
- };
-
- struct object_menu_comp
- { sos_Bool is_method;
- sos_Object o; // isa sos_Method, if is_method
- };
-
- struct object_menu
- { sos_Object o;
- int object_nr;
- what_to_show show;
- int nr_comps;
- object_menu_comp *omc;
- char **sl;
-
- object_menu(){}
- ~object_menu();
- };
-
- struct object_menu_item {object_menu_comp omc; char *s;};
- static struct omi_list
- { object_menu_item *omi;
- int nr_items;
-
- omi_list () {nr_items = 0;}
-
- void clear();
- void insert (sos_Object o, sos_Bool is_method, char *s);
- void print (char*);
- void print (smg_String&);
- void print (sos_Object o);
- void make_object_menu (object_menu *om);
-
- } omis;
-
- enum ocmd_cmds {ocmd_FORMAT, ocmd_CMP, ocmd_MET, ocmd_QUIT};
- static char *ocmd_menu_items [5] =
- {"Format", "hide components", "show methods", "quit"};
- static Widget ocmd_menu;
- static object_menu *ocmd_current_menu;
-
- static class displayed_object_list
- { displayed_object_list *next;
- object_menu *om;
- Widget w;
- public:
- int number;
-
- displayed_object_list () {number = 0;}
-
- void insert (object_menu *om, Widget w);
- void remove (object_menu *om);
- Widget widget (sos_Object o);
- object_menu* menu (sos_Object o);
- object_menu* menu_for_nr (int nr);
- } displayed_objects;
-
- struct position
- { int x, y;
- static position root ();
- static position at_widget (Widget w);
- static position next_to (Widget w);
- };
-
- static const nr_menues = 3;
- static Widget menu_header[nr_menues];
- static Widget menu_list[nr_menues];
- enum hdr_cmds {hdr_FILE, hdr_VIEW, hdr_CONTAINER};
- static char* menu_header_items [nr_menues] = {"File", "View", "Container"};
- enum file_cmds {file_ROOT, file_OBJECT, file_QUIT};
- enum view_cmds {view_CMP, view_MET};
- enum cnt_cmds {cnt_OPEN_READ, cnt_OPEN_WRITE, cnt_COMMIT, cnt_RESET,
- cnt_CLOSE, cnt_CREATE, cnt_DESTROY};
- static char* menu_list_items [nr_menues] [8] =
- { {"root", "object...", "quit"},
- {"hide components", "show methods"},
- {"open reading", "open writing", "commit", "reset",
- "close", "create", "destroy"}
- };
- static int open_menu = nr_menues;
-
- const int ac_max = 30;
- Arg al[ac_max];
- int ac;
-
- Widget app_form_wdgt, form_wdgt;
-
- const int cnt_length = 10;
- static char cnt_string [cnt_length+1];
- const int os_length = 10;
- static char os_string [os_length+1];
-
- static struct
- { Widget main, cnt, os;
- } co_menu_wdgts;
-
- static struct
- { Widget main, cnt;
- } cnt_menu_wdgts;
-
- static cnt_cmds cnt_cmd;
-
- sos_Object root_object;
-
- Widget info_line_wdgt;
- const int info_length = 80;
- char info_string [info_length+1];
-
- // *********************** Global Functions ***************************
-
- static void draw_frame (Display *disp, Window win, GC dragGC,
- int win_x, int win_y,
- Dimension width, Dimension height);
- static void query_pointer (Display *disp, Window win,
- int &win_x, int &win_y,
- int xoffs, int yoffs);
- static void drag_object (Widget w,
- caddr_t client_data,
- XEvent *event);
-
- static void object_callback (Widget w,
- caddr_t client_data,
- caddr_t call_data);
- static void ocmd_callback (Widget w,
- caddr_t client_data,
- caddr_t call_data);
-
- static sos_Object call_comp_method (sos_Object &o, sos_Method &m);
-
- static void display_component (sos_Object o,
- sos_Method m,
- what_to_show show);
- static void display_class_instance (sos_Object o,
- sos_Class_type ct,
- what_to_show show);
- static void display_object_menu (sos_Object o,
- position pos,
- what_to_show show);
-
- static void display_cmd_menu (sos_Object o, sos_Method m,
- int object_nr, position pos);
-
- static void menu_list_callback (Widget w,
- caddr_t client_data,
- caddr_t call_data);
- static void menu_header_callback (Widget w,
- caddr_t client_data,
- caddr_t call_data);
-
- static void co_cancel_callback (Widget w,
- caddr_t client_data,
- caddr_t call_data);
- static void co_do_callback (Widget w,
- caddr_t client_data,
- caddr_t call_data);
- static void display_co_menu();
-
- static void cnt_cancel_callback (Widget w,
- caddr_t client_data,
- caddr_t call_data);
- static void cnt_do_callback (Widget w,
- caddr_t client_data,
- caddr_t call_data);
- static void display_cnt_menu();
-
- static void display_root();
- static void display_info (err_msg msg);
-
- static void install_header_menues ();
- static void install_ocmd_menu ();
- static void install_dialogues ();
-
- // ********************** SetValue Arguments **************************
-
- void inline inc_ac()
- { if (ac >= ac_max)
- { fprintf (stderr, "argument overflow\n");
- exit (1);
- }
- ac++;
- }
-
- // *************************** Dragging *******************************
-
- void draw_frame (Display *disp, Window win, GC dragGC,
- int win_x, int win_y,
- Dimension width, Dimension height)
- { XDrawRectangle (disp, win, dragGC, win_x, win_y, width, height);
- }
-
- void inline query_pointer (Display *disp, Window win,
- int &win_x, int &win_y,
- int xoffs, int yoffs)
- { Window rootwin, childwin;
- int root_x, root_y;
- unsigned int mask;
-
- XQueryPointer (disp, win,
- &rootwin, &childwin,
- &root_x, &root_y,
- &win_x, &win_y, &mask);
- win_x -= xoffs; if (win_x < 0) win_x = 0;
- win_y -= yoffs; if (win_y < 0) win_y = 0;
- }
-
- void drag_object (Widget w, caddr_t, XEvent *event)
- { XEvent ev;
- Widget parent = XtParent (w);
- Display *disp = XtDisplay (parent);
- Window win = XtWindow (parent);
- GC dragGC;
- Dimension width, height, borderwidth;
- int win_x, win_y;
- int xoffs, yoffs;
- static int initGC = TRUE;
-
-
- if (event->xbutton.button != 2) return;
-
- // GC beim ersten Aufruf initialisieren
- if (initGC == TRUE)
- {
- dragGC = XCreateGC (disp, win, 0, NULL);
- XSetForeground (disp, dragGC, BlackPixel (disp, 0));
- XSetSubwindowMode (disp, dragGC, IncludeInferiors);
- XSetFunction (disp, dragGC, GXxor);
- }
-
- ac=0;
- XtSetArg (al[ac], XtNwidth, &width); inc_ac();
- XtSetArg (al[ac], XtNheight, &height); inc_ac();
- XtSetArg (al[ac], XtNborderWidth, &borderwidth); inc_ac();
- XtGetValues (w, al, ac);
-
- xoffs = event->xbutton.x + borderwidth;
- yoffs = event->xbutton.y + borderwidth;
-
- query_pointer (disp, win, win_x, win_y, xoffs, yoffs);
- draw_frame (disp, win, dragGC, win_x, win_y, width, height);
-
- XChangeActivePointerGrab(disp,
- (unsigned)(ButtonReleaseMask | ButtonMotionMask
- | OwnerGrabButtonMask),
- XCreateFontCursor (disp, XC_fleur),
- (Time)CurrentTime);
-
- while (TRUE)
- { XtNextEvent (&ev);
- switch (ev.type)
- { case MotionNotify:
- draw_frame (disp, win, dragGC, win_x, win_y, width, height);
- query_pointer (disp, win, win_x, win_y, xoffs, yoffs);
- draw_frame (disp, win, dragGC, win_x, win_y, width, height);
- break;
- case ButtonRelease:
- if (ev.xbutton.button == 2)
- { draw_frame (disp, win, dragGC, win_x, win_y, width, height);
- query_pointer (disp, win, win_x, win_y, xoffs, yoffs);
-
- XtMoveWidget (w, win_x, win_y);
- XRaiseWindow (XtDisplay (w), XtWindow (w));
- ac=0;
- XtSetArg (al[ac], XtNhorizDistance, win_x); inc_ac();
- XtSetArg (al[ac], XtNvertDistance, win_y); inc_ac();
- XtSetValues (w, al, ac);
- XtUnmanageChild (w);
- XtManageChild (w);
- return;
- }
- break;
- }
- }
- }
-
- // ************************* Object Menues ****************************
-
- object_menu::~object_menu()
- { for (int i=0; i<nr_comps; i++)
- delete sl[i];
- delete omc;
- delete sl;
- }
-
- void omi_list::clear ()
- { omi = 0;
- nr_items = 0;
- }
-
- void omi_list::insert (sos_Object o, sos_Bool is_method, char *s)
- { if (nr_items % 10 == 0)
- { object_menu_item *new_omi = new object_menu_item [nr_items+10];
- for (int i=0; i<nr_items; i++)
- new_omi[i] = omi[i];
- delete omi;
- omi = new_omi;
- }
- omi [nr_items].s = new char [strlen(s)+1];
- strcpy (omi [nr_items].s, s);
- omi [nr_items].omc.is_method = is_method;
- omi [nr_items].omc.o = o;
- nr_items++;
- }
-
- void omi_list::print (char *s)
- { char *new_str = new char [strlen (s) + strlen (omi [nr_items-1].s) + 1];
- strcpy (new_str, omi [nr_items-1].s);
- strcat (new_str, s);
- delete omi [nr_items-1].s;
- omi [nr_items-1].s = new_str;
- }
-
- void omi_list::print (smg_String &s)
- { print (s.make_Cstring(SMG_BORROW));
- }
-
- void omi_list::print (sos_Object o)
- { if (o == NO_OBJECT)
- { print ("<>");
- return;
- }
-
- sos_Type tp = o.type();
-
- if (tp.has_type (sos_Class_type_type))
- { if (o.isa (sos_Named_type))
- { sos_String str = sos_Named::make (o).get_name();
- if (str != NO_OBJECT)
- print (str.make_Cstring());
- print ("...");
- }
- else if (o.isa (sos_String_type))
- { print ("\"");
- print (sos_String::make (o).make_Cstring());
- print ("\"");
- }
- else
- print ("...");
- }
- else if (tp.has_type (sos_Enum_type_type))
- { int i = sos_Int_from_enum (o, tp);
- print (sos_Enum_type::make (tp).get_literals().get_nth (i+1).
- make_Cstring());
- }
- else if (tp.has_type (sos_Extern_type_type))
- print (cci_Schema_impl::string_from_extern_object (o).make_Cstring());
- else
- print ("???");
- }
-
- static int compare_omi (void *c1, void *c2)
- { return strcmp (((object_menu_item*)c1)->s, ((object_menu_item*)c2)->s);
- }
-
- void omi_list::make_object_menu (object_menu *om)
- { qsort (&omi[2], nr_items-2, sizeof(object_menu_item), compare_omi);
- char **sl = new char* [nr_items];
- object_menu_comp *omc = new object_menu_comp [nr_items];
- om->nr_comps = nr_items;
- om->sl = sl;
- om->omc = omc;
- for (int i=0; i<nr_items; i++)
- { sl[i] = omi[i].s;
- omc[i] = omi[i].omc;
- }
- }
-
- void object_callback (Widget w, caddr_t client_data, caddr_t call_data)
- { int i = ((XawListReturnStruct*) call_data)->list_index;
- object_menu *om = (object_menu*) client_data;
-
- XawListUnhighlight (w);
-
- if (i == 0)
- { position pos = position::at_widget (w);
- if (om->show.cmp)
- ocmd_menu_items [1] = "hide components";
- else
- ocmd_menu_items [1] = "show components";
- if (om->show.met)
- ocmd_menu_items [2] = "hide methods";
- else
- ocmd_menu_items [2] = "show methods";
- XawListHighlight (ocmd_menu, 0);
- XtMoveWidget (ocmd_menu, pos.x, pos.y);
- XtMapWidget (ocmd_menu);
- XRaiseWindow (XtDisplay (ocmd_menu), XtWindow (ocmd_menu));
- XtAddGrab (ocmd_menu, TRUE, FALSE);
- ocmd_current_menu = om;
- }
- else
- { object_menu_comp omc;
- omc = om->omc[i];
- if (omc.is_method)
- display_cmd_menu (om->o, sos_Method::make (omc.o),
- om->object_nr, position::next_to (w));
- else
- display_object_menu (omc.o, position::next_to (w), current_show);
- }
- }
-
- // ********************** Object Command Menu *************************
-
- void ocmd_callback (Widget, caddr_t, caddr_t call_data)
- { ocmd_cmds cmd = ocmd_cmds (((XawListReturnStruct*) call_data)->list_index);
- sos_Object o;
- position pos;
- what_to_show show;
-
- XtRemoveGrab (ocmd_menu);
- XtUnmapWidget (ocmd_menu);
-
- switch (cmd)
- { case ocmd_FORMAT:
- break;
- case ocmd_CMP:
- o = ocmd_current_menu->o;
- pos = position::at_widget
- (displayed_objects.widget (ocmd_current_menu->o));
- show = ocmd_current_menu->show;
- show.cmp = (sos_Bool)(NOT show.cmp);
- display_object_menu (o, pos, show);
- break;
- case ocmd_MET:
- o = ocmd_current_menu->o;
- pos = position::at_widget
- (displayed_objects.widget (ocmd_current_menu->o));
- show = ocmd_current_menu->show;
- show.met = (sos_Bool)(NOT show.met);
- display_object_menu (o, pos, show);
- break;
- case ocmd_QUIT:
- displayed_objects.remove (ocmd_current_menu);
- break;
- default:
- break;
- }
- ocmd_current_menu = 0;
- }
-
- // ************************* Dumped Objects ***************************
-
- void displayed_object_list::insert (object_menu *om, Widget w)
- { displayed_object_list *ol = new displayed_object_list;
- ol->next = next;
- ol->om = om;
- ol->w = w;
- next = ol;
- number++;
- }
-
- void displayed_object_list::remove (object_menu *om)
- { for (displayed_object_list *ol = this; ol->next; ol=ol->next)
- if (ol->next->om == om)
- { displayed_object_list *od = ol->next;
- ol->next = ol->next->next;
- XtDestroyWidget (od->w);
- delete od;
- delete om;
- return;
- }
- }
-
- Widget displayed_object_list::widget (sos_Object o)
- { for (displayed_object_list *ol = next; ol; ol=ol->next)
- if (ol->om->o == o)
- return ol->w;
- return NULL;
- }
-
- object_menu* displayed_object_list::menu (sos_Object o)
- { for (displayed_object_list *ol = next; ol; ol=ol->next)
- if (ol->om->o == o)
- return ol->om;
- return 0;
- }
-
- object_menu* displayed_object_list::menu_for_nr (int nr)
- { for (displayed_object_list *ol = next; ol; ol=ol->next)
- if (ol->om->object_nr == nr)
- return ol->om;
- return 0;
- }
-
- // ************************ Widget Positions **************************
-
- position position::root ()
- { position result;
- result.x = default_distance;
- result.y = default_distance;
- return result;
- }
-
- position position::at_widget (Widget w)
- { ac=0;
- position result;
- int width;
-
- XtSetArg (al[ac], XtNhorizDistance, &result.x); inc_ac();
- XtSetArg (al[ac], XtNvertDistance, &result.y); inc_ac();
- XtSetArg (al[ac], XtNwidth, &width); inc_ac();
- XtGetValues (w, al, ac);
- return result;
- }
-
- position position::next_to (Widget w)
- { ac=0;
- position result;
- Dimension width;
-
- XtSetArg (al[ac], XtNhorizDistance, &result.x); inc_ac();
- XtSetArg (al[ac], XtNvertDistance, &result.y); inc_ac();
- XtSetArg (al[ac], XtNwidth, &width); inc_ac();
- XtGetValues (w, al, ac);
- result.x += width + default_distance;
- return result;
- }
-
- // ******************* Display Object Components **********************
-
- void exec_method (sos_Method &m, sos_Object &o, sos_Object_Array &p,
- sos_Object &result)
- { result = m.execute (o, p);
- }
-
- sos_Object call_comp_method (sos_Object &o, sos_Method &m)
- { sos_Object result;
-
- err_block
- { exec_method (m, o, sos_Object_Array::make (NO_OBJECT), result);
- }
- err_exception
- { display_info(err_last_raised());
- result = NO_OBJECT;
- }
- err_block_end
-
- return result;
- }
-
- void display_component (sos_Object o, sos_Method m, what_to_show show)
- { sos_Method rm = m.get_generated_from();
- if (rm == NO_OBJECT)
- rm = m;
-
- if (rm.get_kind() == sos_PUBLIC)
- { if (rm.has_type (sos_Comp_method_type) AND
- NOT sos_Comp_method::make (rm).get_is_set())
- { if (show.cmp)
- { err_block
- { sos_Object co = call_comp_method (o, rm);
- omis.insert (co, FALSE, "");
- omis.print (rm.get_name().make_Cstring());
- omis.print ("=");
- omis.print (co);
- }
- err_exception
- { omis.insert (NO_OBJECT, FALSE, "");
- omis.print (rm.get_name().make_Cstring());
- omis.print ("=???");
- }
- err_block_end
- }
- }
- else
- { if (show.met)
- { omis.insert (rm, TRUE, "");
- omis.print (rm.get_name().make_Cstring());
- omis.print ("(...)");
- }
- }
- }
- }
-
- void display_class_instance (sos_Object o,
- sos_Class_type ct,
- what_to_show show)
- { sos_Method_table mt = ct.get_inherited_methods();
- agg_iterate_association (mt, sos_String name, sos_Method_List ml)
- { agg_iterate (ml, sos_Method m)
- { if (NOT m.get_is_static ())
- display_component (o, m, show);
- }
- agg_iterate_end (ml, m);
- }
- agg_iterate_association_end (mt, name, ml);
-
- if (o.has_type (sos_Class_type_type))
- { if (show.met)
- { sos_Method_List ml = sos_Class_type::make(o).get_static_methods();
- agg_iterate (ml, sos_Method m)
- { display_component (o, m, show);
- }
- agg_iterate_end (ml, m);
- }
- }
- else if (show.cmp)
- { if(o.is_some (sos_String_type))
- { omis.insert (NO_OBJECT, FALSE, "");
- omis.print ("*value*=\"");
- omis.print (sos_String::make (o).make_Cstring());
- omis.print ("\"");
- }
- else if (o.is_some (sos_Object_Collection_type))
- { sos_Object_Collection coll = sos_Object_Collection::make (o);
- int vno = 1;
- agg_iterate (coll, sos_Object co)
- { char s [20];
- sprintf (s, "get_elem[%d]=", vno);
- omis.insert (co, FALSE, s);
- omis.print (co);
- vno++;
- }
- agg_iterate_end (coll, co);
- }
- else if (o.is_some (sos_Object_sos_Object_Association_type))
- { sos_Object_sos_Object_Association as =
- sos_Object_sos_Object_Association::make (o);
- int vno = 1;
- agg_iterate_association (as, sos_Object role1, sos_Object role2)
- { char s [20];
- sprintf (s, "get_role1[%d]=", vno);
- omis.insert (role1, FALSE, s);
- omis.print (role1);
- sprintf (s, "get_role2[%d]=", vno);
- omis.insert (role2, FALSE, s);
- omis.print (role2);
- vno++;
- }
- agg_iterate_association_end (as, role1, role2);
- }
- }
- }
-
- void display_object_menu (sos_Object o, position pos, what_to_show show)
- { if (o == NO_OBJECT) return;
-
- // determine new window position
-
- object_menu *om = displayed_objects.menu (o);
- if (om AND om->show == show) // object is already displayed
- { Widget wo = displayed_objects.widget (o);
- XtMoveWidget (wo, pos.x, pos.y);
- XRaiseWindow (XtDisplay (wo), XtWindow (wo));
- ac=0;
- XtSetArg (al[ac], XtNhorizDistance, pos.x); inc_ac();
- XtSetArg (al[ac], XtNvertDistance, pos.y); inc_ac();
- XtSetValues (wo, al, ac);
- XtUnmanageChild (wo);
- XtManageChild (wo);
- }
- else // construct new object widget
- { omis.clear();
-
- int nr;
- sos_Type tp = o.type();
- if (om)
- { nr = om->object_nr;
- displayed_objects.remove (om);
- }
- else
- nr = displayed_objects.number+1;
-
- char on [30];
- if (tp.has_type (sos_Extern_type_type))
- sprintf (on, "#%d", nr);
- else
- sprintf (on, "#%d <%d,%d>", nr, int (o.container()), o.offset());
- omis.insert (NO_OBJECT, FALSE, on);
-
- omis.insert (tp, FALSE, "type=");
- omis.print (tp.get_name().make_Cstring());
-
- if (tp.has_type (sos_Class_type_type))
- display_class_instance (o, sos_Class_type::make(tp), show);
- else
- { omis.insert (NO_OBJECT, FALSE, "*value*=");
- omis.print (o);
- }
-
- object_menu *om = new object_menu;
- om->o = o;
- om->show = show;
- om->object_nr = nr;
- omis.make_object_menu (om);
-
- ac=0;
- XtSetArg (al[ac], XtNnumberStrings, omis.nr_items); inc_ac();
- XtSetArg (al[ac], XtNlist, om->sl); inc_ac();
- XtSetArg (al[ac], XtNverticalList, TRUE); inc_ac();
- XtSetArg (al[ac], XtNforceColumns, TRUE); inc_ac();
- XtSetArg (al[ac], XtNdefaultColumns, 1); inc_ac();
-
- XtSetArg (al[ac], XtNtop, XtChainTop); inc_ac();
- XtSetArg (al[ac], XtNbottom, XtChainTop); inc_ac();
- XtSetArg (al[ac], XtNleft, XtChainLeft); inc_ac();
- XtSetArg (al[ac], XtNright, XtChainLeft); inc_ac();
-
- XtSetArg (al[ac], XtNhorizDistance, pos.x); inc_ac();
- XtSetArg (al[ac], XtNvertDistance, pos.y); inc_ac();
-
- XtSetArg (al[ac], XtNborderWidth, 2); inc_ac();
- XtSetArg (al[ac], XtNborderColor, red_pxl); inc_ac();
- XtSetArg (al[ac], XtNforeground, blue_pxl); inc_ac();
-
- char name [20];
- sprintf (name, "object%d", nr);
-
- Widget object_wdgt = XtCreateManagedWidget
- (name, listWidgetClass, form_wdgt, al, ac);
- XtAddCallback (object_wdgt, XtNcallback,
- (XtCallbackProc) object_callback, (caddr_t) om);
- XtAddEventHandler (object_wdgt, ButtonPressMask, FALSE,
- (XtEventHandler) drag_object, NULL);
-
- XRaiseWindow (XtDisplay (object_wdgt), XtWindow (object_wdgt));
- displayed_objects.insert (om, object_wdgt);
- }
- }
-
- void cmd_cancel_callback (Widget, caddr_t client_data, caddr_t)
- { cmd_menu *cm = (cmd_menu*) client_data;
-
- XtDestroyWidget (cm->main);
- for (int i=0; i<cm->nr_pars; i++)
- delete cm->par_txts [i];
- delete cm->par_txts;
- delete cm->par_wdgts;
- delete cm;
- }
-
- void cmd_do_callback (Widget, caddr_t client_data, caddr_t)
- { cmd_menu *cm = (cmd_menu*) client_data;
- sos_Param_List pl = cm->m.get_params();
- sos_Object_Array pa = sos_Object_Array::create
- (TEMP_CONTAINER, 0, cm->nr_pars);
- sos_Bool error = FALSE;
-
- int i=0;
- agg_iterate (pl, sos_Param p)
- { sos_Type tp = p.get_type_name().make_base_type();
- if (tp.has_type (sos_Enum_type_type))
- { sos_String_List ll = sos_Enum_type::make (tp).get_literals();
- error = TRUE;
- int lnr = 0;
- agg_iterate (ll, sos_String l)
- { sos_String str =
- smg_String (cm->par_txts [i]).make_String (TEMP_CONTAINER);
- if (l.equal (str))
- { pa.set_nth (i, sos_enum_from_sos_Int (lnr, tp));
- error = FALSE;
- str.destroy();
- break;
- }
- else
- str.destroy();
- lnr++;
- }
- agg_iterate_end (ll, l);
- }
- else if (tp.has_type (sos_Extern_type_type))
- { sos_String s =
- smg_String (cm->par_txts [i]).make_String (TEMP_CONTAINER);
- sos_Object ext = cci_Schema_impl::extern_object_from_string (tp, s);
- if (ext == NO_OBJECT)
- error = TRUE;
- else
- pa.set_nth (i, ext);
- }
- else
- { int nr = atoi (cm->par_txts [i]);
- if (nr == 0)
- error = TRUE;
- else
- { object_menu *om = displayed_objects.menu_for_nr (nr);
- if (om == 0)
- error = TRUE;
- else
- pa.set_nth (i, om->o);
- }
- }
- if (error)
- { char info [40];
- sprintf (info, "parameter %d invalid", i+1);
- display_info(info);
- break;
- }
- i++;
- }
- agg_iterate_end (pl, p);
-
- if (NOT error)
- { err_block
- { sos_Object result;
- exec_method (cm->m, cm->o, pa, result);
- XtDestroyWidget (cm->main);
- for (int i=0; i<cm->nr_pars; i++)
- delete cm->par_txts [i];
- delete cm->par_txts;
- delete cm->par_wdgts;
- delete cm;
- display_object_menu
- (result, position::at_widget (cm->main), current_show);
- }
- err_exception
- { display_info(err_last_raised());
- }
- err_block_end
- }
- pa.destroy();
- }
-
- void display_cmd_menu (sos_Object o, sos_Method m, int object_nr, position pos)
- { cmd_menu *cm = new cmd_menu;
- Widget w, w1, do_but, cancel_but;
- sos_Param_List pl = m.get_params();
-
- char nm [20], *s, *s1, *txt;
-
- cm->o=o;
- cm->m=m;
- cm->nr_pars = pl.card();
- cm->par_wdgts = new Widget [cm->nr_pars];
- cm->par_txts = new char* [cm->nr_pars];
-
- ac=0;
- XtSetArg (al[ac], XtNtop, XtChainTop); inc_ac();
- XtSetArg (al[ac], XtNbottom, XtChainTop); inc_ac();
- XtSetArg (al[ac], XtNleft, XtChainLeft); inc_ac();
- XtSetArg (al[ac], XtNright, XtChainLeft); inc_ac();
-
- XtSetArg (al[ac], XtNhorizDistance, pos.x); inc_ac();
- XtSetArg (al[ac], XtNvertDistance, pos.y); inc_ac();
-
- XtSetArg (al[ac], XtNwidth, 100); inc_ac();
- XtSetArg (al[ac], XtNheight, 100); inc_ac();
- XtSetArg (al[ac], XtNresizable, TRUE); inc_ac();
-
- XtSetArg (al[ac], XtNborderWidth, 2); inc_ac();
- XtSetArg (al[ac], XtNborderColor, red_pxl); inc_ac();
- XtSetArg (al[ac], XtNforeground, blue_pxl); inc_ac();
-
- sprintf (nm, "cmd.main%d", cmd_count);
- cm->main = XtCreateWidget
- (nm, formWidgetClass, form_wdgt, al, ac);
- XtAddEventHandler (cm->main, ButtonPressMask, FALSE,
- (XtEventHandler) drag_object, NULL);
-
- ac=0;
- s = m.get_name().make_Cstring();
- s1 = m.get_result_type().make_type_name().make_Cstring();
- txt = new char [strlen(s)+strlen(s1)+20];
- sprintf (txt, "#%d.%s(...)->%s", object_nr, s, s1);
- XtSetArg (al[ac], XtNlabel, txt); inc_ac();
- XtSetArg (al[ac], XtNborderWidth, 0); inc_ac();
- sprintf (nm, "cmd.hdr%d", cmd_count);
- w = XtCreateManagedWidget
- (nm, labelWidgetClass, cm->main, al, ac);
- delete txt;
- delete s1;
- delete s;
-
- int i = 0;
- agg_iterate (pl, sos_Param p)
- { sos_Type_name tn = p.get_type_name();
- sos_Type tp = tn.make_base_type();
- int sl;
-
- ac=0;
- #ifdef ATT
- if (tp.operator==(sos_Cstring_type) OR tp.has_type (sos_Enum_type_type))
- #else
- if (tp == sos_Cstring_type OR tp.has_type (sos_Enum_type_type))
- #endif
- { sl = cmd_string_length;
- XtSetArg (al[ac], XtNscrollHorizontal, TRUE); inc_ac();
- XtSetArg (al[ac], XtNheight, 30); inc_ac();
- }
- else
- sl = cmd_value_length;
-
- cm->par_txts [i] = new char [sl];
- strcpy (cm->par_txts [i], "");
- XtSetArg (al[ac], XtNlength, cmd_string_length); inc_ac();
- XtSetArg (al[ac], XtNstring, cm->par_txts [i]); inc_ac();
- XtSetArg (al[ac], XtNfromVert, w); inc_ac();
- XtSetArg (al[ac], XtNeditType, XawtextEdit); inc_ac();
- sprintf (nm, "cmd.lab%d/%d", cmd_count, i);
- cm->par_wdgts [i] = XtCreateManagedWidget
- (nm, asciiStringWidgetClass, cm->main, al, ac);
- XawTextEnableRedisplay (cm->par_wdgts [i]);
-
- ac=0;
- sos_String pn = p.get_name();
- s = p.get_type_name().make_type_name().make_Cstring();
- if (pn == NO_OBJECT)
- s1 = strdup ("");
- else
- s1 = pn.make_Cstring();
- txt = new char [strlen(s)+strlen(s1)+2];
- sprintf (txt, "%s %s", s, s1);
- XtSetArg (al[ac], XtNlabel, txt); inc_ac();
- XtSetArg (al[ac], XtNborderWidth, 0); inc_ac();
- XtSetArg (al[ac], XtNfromVert, w); inc_ac();
- XtSetArg (al[ac], XtNfromHoriz, cm->par_wdgts [i]); inc_ac();
- sprintf (nm, "cmd.val%d/%d", cmd_count, i);
- w1 = XtCreateManagedWidget
- (nm, labelWidgetClass, cm->main, al, ac);
- delete txt;
- delete s1;
- delete s;
-
- w = cm->par_wdgts [i];
- i++;
- }
- agg_iterate_end (pl, p);
-
- ac=0;
- XtSetArg (al[ac], XtNlabel, " do "); inc_ac();
- XtSetArg (al[ac], XtNfromVert, w); inc_ac();
- sprintf (nm, "cmd.do%d", cmd_count);
- do_but = XtCreateManagedWidget
- (nm, commandWidgetClass, cm->main, al, ac);
- XtAddCallback (do_but, XtNcallback,
- (XtCallbackProc) cmd_do_callback, (caddr_t) cm);
-
- ac=0;
- XtSetArg (al[ac], XtNlabel, "cancel"); inc_ac();
- XtSetArg (al[ac], XtNfromVert, w); inc_ac();
- XtSetArg (al[ac], XtNfromHoriz, do_but); inc_ac();
- XtSetArg (al[ac], XtNhorizDistance, 20); inc_ac();
- sprintf (nm, "cmd.cancel%d", cmd_count);
- cancel_but = XtCreateManagedWidget
- (nm, commandWidgetClass, cm->main, al, ac);
- XtAddCallback (cancel_but, XtNcallback,
- (XtCallbackProc) cmd_cancel_callback, (caddr_t) cm);
-
- XtManageChild (cm->main);
-
- cmd_count++;
- }
-
- // **************************** Menues ********************************
-
- void menu_list_callback (Widget w, caddr_t client_data, caddr_t call_data)
- { XawListReturnStruct *l = (XawListReturnStruct*) call_data;
- hdr_cmds hdr_cmd = hdr_cmds (client_data);
-
- XawListUnhighlight (w);
-
- XtRemoveGrab (menu_header[0]);
- open_menu = nr_menues;
- XtUnmapWidget (w);
-
- switch (hdr_cmd)
- { case hdr_FILE:
- file_cmds file_cmd = file_cmds (l->list_index);
- switch (file_cmd)
- { case file_ROOT:
- display_root();
- break;
- case file_OBJECT:
- display_co_menu();
- break;
- case file_QUIT:
- exit (0);
- break;
- default:
- break;
- }
- break;
- case hdr_VIEW:
- view_cmds view_cmd = view_cmds (l->list_index);
- switch (view_cmd)
- { case view_CMP:
- current_show.cmp = (sos_Bool)(NOT current_show.cmp);
- if (current_show.cmp)
- menu_list_items [hdr_VIEW] [view_CMP] = "hide components";
- else
- menu_list_items [hdr_VIEW] [view_CMP] = "show components";
- break;
- case view_MET:
- current_show.met = (sos_Bool)(NOT current_show.met);
- if (current_show.met)
- menu_list_items [hdr_VIEW] [view_MET] = "hide methods";
- else
- menu_list_items [hdr_VIEW] [view_MET] = "show methods";
- break;
- default:
- break;
- }
- break;
- case hdr_CONTAINER:
- cnt_cmd = cnt_cmds (l->list_index);
- if (cnt_cmd == cnt_CREATE)
- { display_object_menu
- (make_sos_Container_object (sos_Container::create()),
- position::root(), current_show);
- }
- else
- display_cnt_menu();
- break;
- default:
- break;
- }
- }
-
- void menu_header_callback (Widget, caddr_t client_data, caddr_t)
- { int i = (int) client_data;
- Widget lw = menu_list[i];
-
- if (i == open_menu)
- { XtRemoveGrab (menu_header[0]);
- open_menu = nr_menues;
- XtUnmapWidget (lw);
- }
- else
- { if (open_menu < nr_menues)
- { XtRemoveGrab (menu_list[open_menu]);
- XtUnmapWidget (menu_list[open_menu]);
- }
- else
- { for (int j=0; j<nr_menues; j++)
- XtAddGrab (menu_header[j], FALSE, FALSE);
- }
- open_menu = i;
- XtMapWidget (lw);
- XRaiseWindow (XtDisplay (lw), XtWindow (lw));
- XtAddGrab (lw, FALSE, FALSE);
- }
- }
-
- void install_header_menues ()
- { char name[20];
- Widget w;
-
- for (int i=0; i<nr_menues; i++)
- { if (i==0) w = NULL;
- else w = menu_header[i-1];
-
- ac=0;
- XtSetArg (al[ac], XtNborderWidth, 0); inc_ac();
- XtSetArg (al[ac], XtNlabel, menu_header_items[i]); inc_ac();
- XtSetArg (al[ac], XtNfromHoriz, w); inc_ac();
- XtSetArg (al[ac], XtNhorizDistance, 0); inc_ac();
- XtSetArg (al[ac], XtNvertDistance, 0); inc_ac();
- XtSetArg (al[ac], XtNtop, XtChainTop); inc_ac();
- XtSetArg (al[ac], XtNbottom, XtChainTop); inc_ac();
- XtSetArg (al[ac], XtNleft, XtChainLeft); inc_ac();
- XtSetArg (al[ac], XtNright, XtChainLeft); inc_ac();
-
- XtSetArg (al[ac], XtNforeground, red_pxl); inc_ac();
-
- sprintf (name, "menu_label%d", i);
- menu_header[i] = XtCreateManagedWidget
- (name, commandWidgetClass, app_form_wdgt, al, ac);
- XtAddCallback (menu_header[i], XtNcallback,
- (XtCallbackProc) menu_header_callback, (caddr_t) i);
-
- ac=0;
- XtSetArg (al[ac], XtNlist, menu_list_items[i]); inc_ac();
- XtSetArg (al[ac], XtNverticalList, TRUE); inc_ac();
- XtSetArg (al[ac], XtNforceColumns, TRUE); inc_ac();
- XtSetArg (al[ac], XtNdefaultColumns, 1); inc_ac();
- XtSetArg (al[ac], XtNmappedWhenManaged, FALSE); inc_ac();
- XtSetArg (al[ac], XtNfromHoriz, w); inc_ac();
- XtSetArg (al[ac], XtNfromVert, menu_header[i]); inc_ac();
- XtSetArg (al[ac], XtNhorizDistance, 0); inc_ac();
- XtSetArg (al[ac], XtNvertDistance, 0); inc_ac();
- XtSetArg (al[ac], XtNtop, XtChainTop); inc_ac();
- XtSetArg (al[ac], XtNbottom, XtChainTop); inc_ac();
- XtSetArg (al[ac], XtNleft, XtChainLeft); inc_ac();
- XtSetArg (al[ac], XtNright, XtChainLeft); inc_ac();
-
- XtSetArg (al[ac], XtNborderWidth, 2); inc_ac();
- XtSetArg (al[ac], XtNborderColor, red_pxl); inc_ac();
- XtSetArg (al[ac], XtNforeground, green_pxl); inc_ac();
-
- sprintf (name, "menu_list%d", i);
- menu_list[i] = XtCreateManagedWidget
- (name, listWidgetClass, app_form_wdgt, al, ac);
- XtAddCallback (menu_list[i], XtNcallback,
- (XtCallbackProc) menu_list_callback, (caddr_t) i);
- }
- }
-
- static void install_ocmd_menu ()
- { ac=0;
- XtSetArg (al[ac], XtNlist, ocmd_menu_items); inc_ac();
- XtSetArg (al[ac], XtNverticalList, TRUE); inc_ac();
- XtSetArg (al[ac], XtNforceColumns, TRUE); inc_ac();
- XtSetArg (al[ac], XtNdefaultColumns, 1); inc_ac();
- XtSetArg (al[ac], XtNmappedWhenManaged, FALSE); inc_ac();
- XtSetArg (al[ac], XtNtop, XtChainTop); inc_ac();
- XtSetArg (al[ac], XtNbottom, XtChainTop); inc_ac();
- XtSetArg (al[ac], XtNleft, XtChainLeft); inc_ac();
- XtSetArg (al[ac], XtNright, XtChainLeft); inc_ac();
- ocmd_menu = XtCreateManagedWidget
- ("ocmd", listWidgetClass, form_wdgt, al, ac);
- XtAddCallback (ocmd_menu, XtNcallback,
- (XtCallbackProc) ocmd_callback, NULL);
- }
-
- // ************************** Dialogues *******************************
-
- void co_cancel_callback (Widget, caddr_t, caddr_t)
- { XtRemoveGrab (co_menu_wdgts.main);
- XtUnmapWidget (co_menu_wdgts.main);
- }
-
- void co_do_callback (Widget, caddr_t, caddr_t)
- { XtRemoveGrab (co_menu_wdgts.main);
- XtUnmapWidget (co_menu_wdgts.main);
- int cnt, os;
- cnt = atoi (cnt_string);
- if (strlen (os_string) > 0)
- os = atoi (os_string);
- else
- os = ROOT_OFFSET;
-
- char msg [60];
- sprintf (msg, "object <%d/%d> does not exist", cnt, os);
-
- err_block
- { sos_Object o =
- sos_Object::make
- (sos_Typed_id::make
- (sos_Id::make (sos_Container::make (cnt), os)));
- display_object_menu (o, position::root(), current_show);
- }
- err_exception
- { display_info(msg);
- }
- err_block_end
- }
-
- void display_co_menu()
- { XawTextBlock tb;
- tb.firstPos = 0;
- tb.length = 0;
- tb.ptr = 0;
- tb.format = FMT8BIT;
- XawTextReplace (co_menu_wdgts.cnt, 0, strlen (cnt_string), &tb);
- XawTextReplace (co_menu_wdgts.os, 0, strlen (os_string), &tb);
-
- XtMapWidget (co_menu_wdgts.main);
- XRaiseWindow (XtDisplay (co_menu_wdgts.main),
- XtWindow (co_menu_wdgts.main));
-
- XtAddGrab (co_menu_wdgts.main, TRUE, FALSE);
- }
-
- void cnt_cancel_callback (Widget, caddr_t, caddr_t)
- { XtRemoveGrab (cnt_menu_wdgts.main);
- XtUnmapWidget (cnt_menu_wdgts.main);
- }
-
- void cnt_do_callback (Widget, caddr_t, caddr_t)
- { XtRemoveGrab (cnt_menu_wdgts.main);
- XtUnmapWidget (cnt_menu_wdgts.main);
-
- err_block
- { sos_Container cnt =sos_Container::make (atoi (cnt_string));
- switch (cnt_cmd)
- { case cnt_OPEN_READ:
- cnt.open (READING, WAITING);
- break;
- case cnt_OPEN_WRITE:
- cnt.open (WRITING, WAITING);
- break;
- case cnt_COMMIT:
- cnt.commit ();
- break;
- case cnt_RESET:
- cnt.reset ();
- break;
- case cnt_CLOSE:
- cnt.close ();
- break;
- case cnt_CREATE:
- break;
- case cnt_DESTROY:
- cnt.destroy ();
- break;
- default:
- break;
- }
- }
- err_exception
- { display_info(err_last_raised());
- }
- err_block_end
- }
-
- void display_cnt_menu()
- { XawTextBlock tb;
- tb.firstPos = 0;
- tb.length = 0;
- tb.ptr = 0;
- tb.format = FMT8BIT;
- XawTextReplace (cnt_menu_wdgts.cnt, 0, strlen (cnt_string), &tb);
-
- XtMapWidget (cnt_menu_wdgts.main);
- XRaiseWindow (XtDisplay (cnt_menu_wdgts.main),
- XtWindow (cnt_menu_wdgts.main));
-
- XtAddGrab (cnt_menu_wdgts.main, TRUE, FALSE);
- }
-
- void install_dialogues ()
- { Widget cancel_but, do_but, cnt_lab, os_lab;
-
- // ******************** co dialogue *************************
-
- ac=0;
- XtSetArg (al[ac], XtNvertDistance, 30); inc_ac();
- XtSetArg (al[ac], XtNhorizDistance, 30); inc_ac();
- XtSetArg (al[ac], XtNmappedWhenManaged, FALSE); inc_ac();
- XtSetArg (al[ac], XtNtop, XtChainTop); inc_ac();
- XtSetArg (al[ac], XtNbottom, XtChainTop); inc_ac();
- XtSetArg (al[ac], XtNleft, XtChainLeft); inc_ac();
- XtSetArg (al[ac], XtNright, XtChainLeft); inc_ac();
- co_menu_wdgts.main = XtCreateManagedWidget
- ("co.main", formWidgetClass, form_wdgt, al, ac);
- XtAddEventHandler (co_menu_wdgts.main, ButtonPressMask, FALSE,
- (XtEventHandler) drag_object, NULL);
-
- ac=0;
- XtSetArg (al[ac], XtNlabel, "container"); inc_ac();
- XtSetArg (al[ac], XtNborderWidth, 0); inc_ac();
- cnt_lab = XtCreateManagedWidget
- ("co.cnt_lab", labelWidgetClass, co_menu_wdgts.main, al, ac);
-
- ac=0;
- XtSetArg (al[ac], XtNlabel, "offset"); inc_ac();
- XtSetArg (al[ac], XtNborderWidth, 0); inc_ac();
- XtSetArg (al[ac], XtNfromVert, cnt_lab); inc_ac();
- os_lab = XtCreateManagedWidget
- ("co.os_lab", labelWidgetClass, co_menu_wdgts.main, al, ac);
-
- strcpy (cnt_string, "");
- ac=0;
- XtSetArg (al[ac], XtNlength, cnt_length); inc_ac();
- XtSetArg (al[ac], XtNstring, cnt_string); inc_ac();
- XtSetArg (al[ac], XtNfromHoriz, cnt_lab); inc_ac();
- XtSetArg (al[ac], XtNeditType, XawtextEdit); inc_ac();
- co_menu_wdgts.cnt = XtCreateManagedWidget
- ("co.cnt", asciiStringWidgetClass, co_menu_wdgts.main, al, ac);
- XawTextEnableRedisplay (co_menu_wdgts.cnt);
-
- strcpy (os_string, "");
- ac=0;
- XtSetArg (al[ac], XtNlength, os_length); inc_ac();
- XtSetArg (al[ac], XtNstring, os_string); inc_ac();
- XtSetArg (al[ac], XtNfromVert, co_menu_wdgts.cnt); inc_ac();
- XtSetArg (al[ac], XtNfromHoriz, cnt_lab); inc_ac();
- XtSetArg (al[ac], XtNeditType, XawtextEdit); inc_ac();
- co_menu_wdgts.os = XtCreateManagedWidget
- ("co.os", asciiStringWidgetClass, co_menu_wdgts.main, al, ac);
- XawTextEnableRedisplay (co_menu_wdgts.cnt);
-
- ac=0;
- XtSetArg (al[ac], XtNlabel, " do "); inc_ac();
- XtSetArg (al[ac], XtNfromVert, co_menu_wdgts.os); inc_ac();
- do_but = XtCreateManagedWidget
- ("co.do", commandWidgetClass, co_menu_wdgts.main, al, ac);
- XtAddCallback (do_but, XtNcallback,
- (XtCallbackProc) co_do_callback, NULL);
-
- ac=0;
- XtSetArg (al[ac], XtNlabel, "cancel"); inc_ac();
- XtSetArg (al[ac], XtNfromVert, co_menu_wdgts.os); inc_ac();
- XtSetArg (al[ac], XtNfromHoriz, do_but); inc_ac();
- XtSetArg (al[ac], XtNhorizDistance, 20); inc_ac();
- cancel_but = XtCreateManagedWidget
- ("co.cancel", commandWidgetClass, co_menu_wdgts.main, al, ac);
- XtAddCallback (cancel_but, XtNcallback,
- (XtCallbackProc) co_cancel_callback, NULL);
-
- // ******************* cnt dialogue *************************
-
- ac=0;
- XtSetArg (al[ac], XtNvertDistance, 30); inc_ac();
- XtSetArg (al[ac], XtNhorizDistance, 30); inc_ac();
- XtSetArg (al[ac], XtNtop, XtChainTop); inc_ac();
- XtSetArg (al[ac], XtNbottom, XtChainTop); inc_ac();
- XtSetArg (al[ac], XtNleft, XtChainLeft); inc_ac();
- XtSetArg (al[ac], XtNright, XtChainLeft); inc_ac();
- XtSetArg (al[ac], XtNmappedWhenManaged, FALSE); inc_ac();
- cnt_menu_wdgts.main = XtCreateManagedWidget
- ("cnt.main", formWidgetClass, form_wdgt, al, ac);
- XtAddEventHandler (cnt_menu_wdgts.main,
- ButtonPressMask, FALSE, (XtEventHandler) drag_object, NULL);
-
- ac=0;
- XtSetArg (al[ac], XtNlabel, "container"); inc_ac();
- XtSetArg (al[ac], XtNborderWidth, 0); inc_ac();
- cnt_lab = XtCreateManagedWidget
- ("cnt.cnt_lab", labelWidgetClass, cnt_menu_wdgts.main, al, ac);
-
- ac=0;
- XtSetArg (al[ac], XtNlength, cnt_length); inc_ac();
- XtSetArg (al[ac], XtNstring, cnt_string); inc_ac();
- XtSetArg (al[ac], XtNfromHoriz, cnt_lab); inc_ac();
- XtSetArg (al[ac], XtNeditType, XawtextEdit); inc_ac();
- cnt_menu_wdgts.cnt = XtCreateManagedWidget
- ("cnt.cnt", asciiStringWidgetClass, cnt_menu_wdgts.main, al, ac);
- XawTextEnableRedisplay (cnt_menu_wdgts.cnt);
-
- ac=0;
- XtSetArg (al[ac], XtNlabel, " do "); inc_ac();
- XtSetArg (al[ac], XtNfromVert, cnt_menu_wdgts.cnt); inc_ac();
- do_but = XtCreateManagedWidget
- ("cnt.do", commandWidgetClass, cnt_menu_wdgts.main, al, ac);
- XtAddCallback (do_but, XtNcallback,
- (XtCallbackProc) cnt_do_callback, NULL);
-
- ac=0;
- XtSetArg (al[ac], XtNlabel, "cancel"); inc_ac();
- XtSetArg (al[ac], XtNfromVert, cnt_menu_wdgts.cnt); inc_ac();
- XtSetArg (al[ac], XtNfromHoriz, do_but); inc_ac();
- XtSetArg (al[ac], XtNhorizDistance, 20); inc_ac();
- cancel_but = XtCreateManagedWidget
- ("cnt.cancel", commandWidgetClass, cnt_menu_wdgts.main, al, ac);
- XtAddCallback (cancel_but, XtNcallback,
- (XtCallbackProc) cnt_cancel_callback, NULL);
-
- }
-
- void display_root()
- { display_object_menu (root_object, position::root(), current_show);
- }
-
- void display_info (err_msg msg)
- { strncpy (info_string, msg, info_length);
- info_string [info_length] = 0;
- ac=0;
- XtSetArg (al[ac], XtNlabel, info_string); inc_ac();
- XtSetValues (info_line_wdgt, al, ac);
- }
-
- // ***************************** Main *********************************
-
- main (int argc, char *argv[])
- { Widget app_shell;
- Widget app_view;
-
- sos_init (argc, argv);
-
- app_shell = XtInitialize ("main", "Gsh", NULL, 0, (Cardinal*) &argc, argv);
-
- Display *disp = XtDisplay (app_shell);
- Colormap cmap = DefaultColormap (disp, 0);
- XColor color, exact;
- XAllocNamedColor (disp, cmap, "red", &color, &exact);
- red_pxl = color.pixel;
- XAllocNamedColor (disp, cmap, "forest green", &color, &exact);
- green_pxl = color.pixel;
- XAllocNamedColor (disp, cmap, "blue", &color, &exact);
- blue_pxl = color.pixel;
-
- ac=0;
- XtSetArg (al[ac], XtNdefaultDistance, 0); inc_ac();
- app_form_wdgt = XtCreateManagedWidget
- ("app_form", formWidgetClass, app_shell, al, ac);
-
- install_header_menues ();
-
- ac=0;
- XtSetArg (al[ac], XtNforceBars, TRUE); inc_ac();
- XtSetArg (al[ac], XtNallowHoriz, TRUE); inc_ac();
- XtSetArg (al[ac], XtNallowVert, TRUE); inc_ac();
- XtSetArg (al[ac], XtNuseBottom, TRUE); inc_ac();
- XtSetArg (al[ac], XtNuseRight, TRUE); inc_ac();
- XtSetArg (al[ac], XtNheight, 500); inc_ac();
- XtSetArg (al[ac], XtNwidth, 800); inc_ac();
- XtSetArg (al[ac], XtNfromVert, menu_header[0]); inc_ac();
- XtSetArg (al[ac], XtNtop, XtChainTop); inc_ac();
- XtSetArg (al[ac], XtNbottom, XtChainBottom); inc_ac();
- XtSetArg (al[ac], XtNleft, XtChainLeft); inc_ac();
- XtSetArg (al[ac], XtNright, XtChainRight); inc_ac();
- app_view = XtCreateManagedWidget
- ("app_view", viewportWidgetClass, app_form_wdgt, al, ac);
-
- ac=0;
- XtSetArg (al[ac], XtNdefaultDistance, default_distance); inc_ac();
- form_wdgt = XtCreateManagedWidget
- ("form", formWidgetClass, app_view, al, ac);
-
- install_dialogues ();
- install_ocmd_menu ();
-
- strcpy (info_string, "");
- ac=0;
- XtSetArg (al[ac], XtNlabel, info_string); inc_ac();
- XtSetArg (al[ac], XtNborderWidth, 0); inc_ac();
- XtSetArg (al[ac], XtNwidth, 800); inc_ac();
- XtSetArg (al[ac], XtNjustify, XtJustifyLeft); inc_ac();
- XtSetArg (al[ac], XtNfromVert, app_view); inc_ac();
- XtSetArg (al[ac], XtNtop, XtChainTop); inc_ac();
- XtSetArg (al[ac], XtNbottom, XtChainBottom); inc_ac();
- XtSetArg (al[ac], XtNleft, XtChainLeft); inc_ac();
- XtSetArg (al[ac], XtNright, XtChainRight); inc_ac();
- info_line_wdgt = XtCreateManagedWidget
- ("info_line", labelWidgetClass, app_form_wdgt, al, ac);
-
- XtRealizeWidget (app_shell);
-
- if (argc > 3)
- { err_raise (err_USE, err_GSH_USAGE, NULL, FALSE);
- exit (-1);
- }
- else if (argc > 1)
- { sos_Container ct;
- sos_Offset os;
- ct = sos_Container::make (atoi (argv [1]));
- if (argc > 2)
- os = atoi (argv [2]);
- else
- os = ROOT_OFFSET;
- if (ct == 0 OR os == 0)
- { err_raise (err_USE, err_GSH_USAGE, NULL, FALSE);
- exit (-1);
- }
- err_block
- { root_object =
- sos_Object::make (sos_Typed_id::make (sos_Id::make (ct, os)));
- }
- err_exception
- { err_raise (err_USE, err_GSH_INVALID_ROOT, NULL, FALSE);
- exit (-1);
- }
- err_block_end
- }
- else
- root_object = sos_Object_Directory::root();
-
- display_root();
-
- XtMainLoop ();
-
- exit (0);
- }
-